home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / mflms101.arc / GTOD.C < prev    next >
Text File  |  1989-11-25  |  6KB  |  226 lines

  1. /*
  2. **                GET TIME OF DAY UTILITY
  3. **
  4. ** S.E. Margison  Copyright 1987  All rights reserved
  5. ** 11-08-88 A  V1.05  Turbo-C 2.0
  6. **
  7. **   Modified 1989 by Bob Stout
  8. **
  9. **  Options default to date, time, 12 hour format, no seconds, American
  10. **          style reporting.  Either - or / used for options, or none.
  11. **  -d   report (D)ate only
  12. **  -t   report (T)ime only
  13. **  -s   report (S)econds (only if -t option used)
  14. **  -l   Report date in (L)ong format
  15. **  -n   Include the (N)ame of the weekday, if -l format
  16. **  -m   report time in (M)ilitary format (12 hour format if not used)
  17. **  -e   report date in (E)uropean format
  18. **  -r   for time and date reporting, (R)everse order to time first
  19. **  If any options are used, no default values are assumed.
  20. **  No options is the same as -dt
  21. **
  22. **   As distributed, this program requires (for compilation):
  23. **     "The MicroFirm Function LIbrary for MS/QC"
  24. **   which may be obtained without registration from many Bulletin
  25. **   Board Systems.
  26. **
  27. **   or by registration:
  28. **      $25 for Docs, C, S, M, L, H libraries, and complete library source
  29. **              in C and Assembler
  30. **     MicroFirm
  31. **     P.O. Box 428
  32. **     Alief, TX 77411
  33. **
  34. */
  35.  
  36. #include <stdio.h>
  37. #include <time.h>
  38. #include <smdefs.h>
  39.  
  40. int nf, tf, df, sf, mf, rf, ef, lf;   /* option flags */
  41.  
  42. char datestr[64],   /* place for formatted date string */
  43.      timestr[16];   /* place for formatted time sring */
  44.  
  45. extern char *wkdayname();
  46. extern char *monthis();
  47.  
  48. struct tm *ptm;
  49. long clockval;
  50.  
  51. main(argc, argv)
  52. int argc;
  53. char *argv[];
  54. {
  55.  
  56.     /* first thing to do is read the clock! */
  57.  
  58.    time(&clockval);
  59.    ptm = localtime(&clockval);
  60.    doargs(argc, argv);  /* parse any options */
  61.  
  62.    if(!tf and !df) tf = df = YES;
  63.  
  64.    if(!tf) timestr[0] = NULL;   /* skip the time */
  65.    else mktime();
  66.  
  67.    if(!df) datestr[0] = NULL;   /* skip the date */
  68.    else mkdate();
  69.  
  70.    if(!rf) printf("%s  %s\n", datestr, timestr);
  71.    else printf("%s  %s\n", timestr, datestr);
  72. }
  73.  
  74. doargs(argc, argv)
  75. int argc;
  76. char *argv[];
  77. {
  78.    int i;
  79.    nf = tf = df = sf = mf = rf = ef = lf = NO;
  80.    while(--argc > 0) {
  81.       i = 0;
  82.       while(argv[argc][i] isnot NULL) {
  83.          switch(tolower(argv[argc][i++])) {
  84.             case '-': case '/':
  85.                break;
  86.             case 'n':
  87.                nf = YES;
  88.                break;
  89.             case 'd':
  90.                df = YES;
  91.                break;
  92.             case 't':
  93.                tf = YES;
  94.                break;
  95.             case 's':
  96.                sf = YES;
  97.                break;
  98.             case 'm':
  99.                mf = YES;
  100.                break;
  101.             case 'r':
  102.                rf = YES;
  103.                break;
  104.             case 'e':
  105.                ef = YES;
  106.                break;
  107.             case 'l':
  108.                lf = YES;
  109.                break;
  110.             case 'v':
  111.                fputs("GTOD Version 1.05\n", stderr);
  112.                fputs("GTOD ? for usage message\n", stderr);
  113.                error("Copyright 1988 S.E. Margison");
  114.             case '?':
  115.                usage();
  116.             default:
  117.                fputc(argv[argc][--i], stderr);
  118.                error(": invalid option");
  119.             }  /* end of switch */
  120.          } /* end of inner while */
  121.       }  /* end of outer while */
  122.    }
  123.  
  124. mkdate()
  125. {
  126.    int i, mpos, dpos;
  127.    char *mstr, dstr[6];
  128.    mpos = 0;
  129.    dpos = 3;
  130.    if(lf) {
  131.       dstr[0] = (ptm->tm_mday / 10) | '0';
  132.       if(dstr[0] is '0') dstr[0] = ' ';
  133.       dstr[1] = (ptm->tm_mday % 10) | '0';
  134.       dstr[2] = NULL;
  135.       if(nf) {
  136.          i = weekday(ptm->tm_mon+1, ptm->tm_mday, ptm->tm_year+1900);
  137.          mstr = wkdayname(i);
  138.          strcpy(datestr, mstr);
  139.          strcat(datestr, ", ");
  140.          }
  141.       mstr = monthis(ptm->tm_mon);
  142.       if(ef) {
  143.          strcat(datestr, dstr);
  144.          strcat(datestr, " ");
  145.          strcat(datestr, mstr);
  146.          }
  147.       else {
  148.          strcat(datestr, mstr);
  149.          strcat(datestr, " ");
  150.          strcat(datestr, dstr);
  151.          }
  152.       strcat(datestr, ", ");
  153.       i_dstr(dstr, ptm->tm_year+1900);
  154.       strcat(datestr, dstr);
  155.       return;
  156.       }
  157.  
  158.    if(ef) { mpos = 3; dpos = 0; }
  159.  
  160.    ptm->tm_mon++;    /* insure it is in range 1-12 */
  161.    datestr[mpos++] = (ptm->tm_mon / 10) | '0';
  162.    datestr[mpos] = (ptm->tm_mon % 10) | '0';
  163.    datestr[2] = datestr[5] = '/';
  164.    datestr[dpos++] = (ptm->tm_mday / 10) | '0';
  165.    datestr[dpos] = (ptm->tm_mday % 10) | '0';
  166.    i = ptm->tm_year;
  167.    if(i > 100) i -= 100;
  168.    datestr[6] = (i / 10) | '0';
  169.    datestr[7] = (i % 10) | '0';
  170.    datestr[8] = NULL;
  171.    }
  172.  
  173. mktime()
  174. {
  175.    int hrs, eos;
  176.    timestr[2] = ':';
  177.    timestr[3] = (ptm->tm_min / 10) | '0';
  178.    timestr[4] = (ptm->tm_min % 10) | '0';
  179.    if(sf) {
  180.       timestr[5] = ':';
  181.       timestr[6] = (ptm->tm_sec / 10) | '0';
  182.       timestr[7] = (ptm->tm_sec % 10) | '0';
  183.       eos = 8;
  184.       }
  185.    else eos = 5;
  186.    if(mf) {
  187.       timestr[0] = (ptm->tm_hour / 10) | '0';
  188.       timestr[1] = (ptm->tm_hour % 10) | '0';
  189.       timestr[eos] = NULL;
  190.       }
  191.    else {
  192.       timestr[eos++] = ' ';
  193.       timestr[eos] = 'A';
  194.  
  195.       if(ptm->tm_hour >= 12) timestr[eos] = 'P';  /* set PM */
  196.  
  197.       if(ptm->tm_hour > 12) hrs = ptm->tm_hour - 12;
  198.       else if(ptm->tm_hour is 0) hrs = 12;   /* midnight = 12AM */
  199.       else hrs = ptm->tm_hour;
  200.  
  201.       timestr[++eos] = 'M';
  202.       timestr[++eos] = NULL;
  203.       timestr[0] = (hrs / 10) | '0';
  204.       timestr[1] = (hrs % 10) | '0';
  205.       if(timestr[0] == '0') timestr[0] = ' ';
  206.       }
  207.    }
  208.  
  209. usage() {
  210. puts("GTOD <options> or <-options> or </options>");
  211. puts("redirect stdout as desired");
  212. puts("d   report (D)ate only");
  213. puts("t   report (T)ime only");
  214. puts("s   report (S)econds (only if time is enabled)");
  215. puts("l   Report date in (L)ong format  (September 10, 1986)");
  216. puts("n   Include the (N)ame of the weekday, if -l format");
  217. puts("m   report time in (M)ilitary format (else, 12 hour format with AM/PM)");
  218. puts("e   report date in (E)uropean format  (DD/MM/YY)");
  219. puts("r   for time and date reporting, (R)everse order to time first");
  220. puts("    No options is the same as -dt:  MM/DD/YY hh:mm");
  221. puts("v   Version number and copyright message");
  222. puts("?   This help message");
  223. aabort(BELL);
  224.    }
  225.  
  226.